# 03장 쿠버네티스 컨테이너 실행하기
Assembled by GimunLee
# kubectl
- 쿠버네티스 클러스터를 관리하는 동작 대부분은 kubectl이라는 커맨드 인터페이스로(Command Line interface, CLI)로 실행 가능
- 쿠버네티스 자원들의 생성, 업데이트, 삭제(create, update, delete)
- 디버그, 모니터링, 트러블 슈팅(log, exec, cp, top, attach)
- 클러스터 관리(cordon, top, drain, taint)
# 기본 사용법
$ kubectl [command] [TYPE] [NAME] [flags]
- command: 자원에 실행하려는 동작 (create, get, delete)
- TYPE: 자원 타입 (pod, service, ingress)
- NAME: 자원 이름
- FLAG: 부가적으로 설정할 옵션
# kubectl get
- 쿠버네티스 자원 상태 확인하는 명령어
# kubctl get pods
$ kubectl get pods
NAME: 파드 이름 표시
READY: 파드의 준비 상태 표시
- 0/1: 파드가 생성되었으나 사용할 준비가 되지 않음
- 1/1: 파드가 생성되었고 사용할 준비가 되었음
STATUS: 파드의 현재 상태 표시
Running: 파드가 실행됨
Terminating: 컨테이너 접속 중
ContainerCreating: 컨테이너 생성 중
RESTARTS: 해당 파드가 몇 번 재시작했는지를 표시
AGE: 파드를 생성한 후 얼마나 시간이 지났는지 표시
# Kubectl get services
$ kubectl get services
NAME: 서비스의 이름 표시
TYPE: 서비스 타입 표시
CLUSTER-IP: 현재 클러스터 안에서 사용되는 IP
EXTERNAL-IP: 클러스터 외부에서 접속할 때 사용하는 IP
PORT(S): 해당 서비스에 접속하는 포트 표시
AGE: 자원을 생성한 후 얼마나 시간이 지났는지 표시
추가로, kubernets라는 이름의 서비스는 kube-apiserver 관련 파드들을 가르킴
# POSIX/GNU 스타일의 명령 작성 규칙
- kubectl은 기본적으로 POSIX/GNU 스타일의 명령 작성 규칙을 따름
# 주요 규칙
- -과 함께 사용하는 옵션은 단일 알파벳/숫자 문자 인자와 같은 짧은 옵션(short option)
- 일부 옵션은 인자를 필요로 함
- --과 함께 사용하는 옵션은 알파벳 두 글자 이상으로 구성한 긴 옵션(long options)
- -- 이후에 작성하는 인자가 있다면 쿠버네티스 관련 옵션들을 종료
# Kubeconfig 환경 변수
- kubectl은 기본적으로 $HOME/.kube/config 파일에서 클러스터, 인증, 컨텍스트 정보를 읽어들이는데, 이러한 클러스터 구성 정보를 kubeconfig라고 칭함
- 클러스터에서 사용할 수 있는 자원들은
$ kubectl api-resources
명령으로 확인 가능한데, 자원을 사용하기 전 반드시 확인하는 것이 좋음
# 디플로이먼트를 이용해 컨테이너 실행하기
- 쿠버네티스를 이용해서 컨테이너를 실행하는 방법에는 크게 두 가지가 존재
$ kubectl run
명령으로 직접 컨테이너를 실행- 컨테이너를 어떻게 실행할지 세부 내용을 담은 YAML 형식의 템플릿으로 컨테이너 실행
- 템플릿으로 컨테이너를 관리하면 버전 관리 시스템과 연동해서 자원 정의 변동 사항을 추적하기 쉽다는 장점이 있음
# kubectl run으로 컨테이너 실행하기
$ kubectl run 디플로이먼트이름 --image 컨테이너이미지이름 --port=포트번호
- 쿠버네티스는 파드를 실행하는 여러 가지 컨트롤러를 제공하는데,
$ kubectl run
으로 파드를 실행시킬때 기본 컨트롤러는 디플로이먼트(deployment) - 사용자가 쿠버네티스 클러스터에 컨테이너를 실행하라고 명령하면 지정된 컨테이너 이미지를 가져와 쿠버네티스 클러스터 안에서 실행
$ kubectl get deployments
- NAME: 클러스터에 배포한 디플로이먼트 이름
- READY: 사용자가 최종 배포한 파드 개수와 디플로이먼트를 이용해 현재 클러스터에 실제로 동작시킨 파드 개수를 X/X 형태로 표시
- UP-TO-DATE: 디플로이먼트 설정에 정의한 대로 동작중인 신규 파드 개수
- AVAILABLE: 서비스 가능한 파드 개수로 헬스 체크로 서비스 가능한 상태라고 판단하면, AVAILABLE 항목의 파드 개수에 포함
- AGE: 디플로이먼트를 생성한 후 얼마나 지났는지 시간을 표시
# 템플릿으로 컨테이너 실행하기
apiVersion: apps/v1
kind: Deployment
metadata:
name: nginx-app
labels:
app: nginx-app
spec:
replicas: 1
selector:
matchLabels:
app: nginx-app
template:
metadata:
labels:
app: nginx-app
spec:
containers:
- name: nginx-app
image: nginx
ports:
- containerPort: 8080
$ kubectl apply -f nginx-app.yaml
- 쿠버네티스의 자원들은 관련 설정을 정의한 템플릿과
$ kubectl apply
명령을 이용해 선억적 형태로 관리할 것을 권장
# Referenses
- 쿠버네티스 입문 - 90가지 예제로 배우는 컨테이너 관리 자동화 표준 / 동양북스